home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok15.lha / Seafarers_Manual / Source / Prime.mod < prev    next >
Text File  |  1993-08-15  |  1KB  |  49 lines

  1. MODULE Prime;   (* Generate prime numbers *)
  2.  
  3.   (* From the book "Modula-2  A Seafarer's Manual and Shipyard Guide" *)
  4.   (* Page 73   adapted "Amiga M2Modula-2"   04 Mar 1988 *)
  5.  
  6. FROM InOut IMPORT WriteLn,
  7.                   WriteCard,
  8.                   WriteString;
  9.                   
  10. CONST
  11.   FlgSize = 8190;        (* array size *)
  12.   
  13. VAR
  14.   Flags : ARRAY [0..FlgSize] OF BOOLEAN;
  15.                 (* indicates primes
  16.                    if nth element = TRUE, then n + n + 3 is prime
  17.                    if nth element = FALSE, then n + n + 3 is not prime
  18.                    (n ranges from 0 to 8190) *)
  19.   i,                (* indexes for *)
  20.   k,                (* Flags array *)
  21.   Prime,            (* prime number *)
  22.   Count : CARDINAL;        (* number of primes found *)
  23.   
  24. BEGIN
  25.   Count := 0;            (* initialize num. found *)
  26.   FOR i := 0 TO FlgSize BY 1 DO (* initialize array as *)
  27.     Flags[i] := TRUE;
  28.   END;
  29.   
  30.   FOR i := 0 TO FlgSize BY 1 DO
  31.     IF Flags[i] THEN        (* prime? *)
  32.       Prime := i + i + 3;    (* yes-calculate next one *)
  33.       WriteCard (Prime,7);    (* display prime *)
  34.       k := i + Prime;        (* index to multiple *)
  35.       WHILE (k <= FlgSize) DO    (* indicate multiple nonprime *)
  36.         Flags[k] := FALSE;
  37.         INC(k,Prime);        (* increment to next nonprime *)
  38.       END;            (* WHILE *)
  39.       INC(Count);
  40.     END;   (* IF *)
  41.   END;   (* FOR *)
  42.   
  43.   WriteLn;
  44.   WriteCard (Count,6);
  45.   WriteString (" primes");
  46.   WriteLn;
  47.   
  48. END Prime.
  49.